package com.cw.lang.common.pagehelper;

import com.github.pagehelper.Page;

/**
 * @author chenw
 * @version $$Id: PageHelper.java, v 0.1 2018/3/13 上午10:45 chenw Exp $$
 */
public class PageHelper {

    /**
     * 开始分页<br>
     * 必须放在分页mapper接口调用之前，以防出问题<br>
     * 用以兼容之前使用start来进行分页的逻辑<br>
     *
     * @param start 开始下标(从0开始计算)
     * @param pageSize 每页显示数量
     * @return 分页信息
     * @deprecated 废弃，方法体修改 {@link #offsetPage(Long, Long)}
     */
    @Deprecated
    public static <E> PageWrapper<E> startPageByStart(Long start, Long pageSize) {
        return offsetPage(start, pageSize);
    }

    /**
     * 开始分页
     *
     * @param offset 起始位置，偏移位置
     * @param limit 每页显示数量
     */
    public static <E> PageWrapper<E> offsetPage(Long offset, Long limit) {
        return new PageWrapper<>(com.github.pagehelper.PageHelper.offsetPage(offset.intValue(), limit.intValue()));
    }

    /**
     * 开始分页
     *
     * @param offset 起始位置，偏移位置
     * @param limit 每页显示数量
     * @param count 是否进行count查询
     */
    public static <E> PageWrapper<E> offsetPage(Long offset, Long limit, boolean count) {
        return new PageWrapper<>(
            com.github.pagehelper.PageHelper.offsetPage(offset.intValue(), limit.intValue(), count));
    }

    /**
     * 开始分页
     *
     * @param offset 起始位置，偏移位置
     * @param limit 每页显示数量
     * @param count 是否进行count查询
     * @param orderBy 排序字段
     * @return 分页信息
     */
    public static <E> PageWrapper<E> offsetPage(Long offset, Long limit, boolean count, String orderBy) {
        Page<E> page = com.github.pagehelper.PageHelper.offsetPage(offset.intValue(), limit.intValue(), count);
        com.github.pagehelper.PageHelper.orderBy(orderBy);
        return new PageWrapper<>(page);
    }

    /**
     * 开始分页<br>
     * 对分页内容进行orderBy排序<br>
     * 必须放在分页mapper接口调用之前，以防出问题<br>
     * 用以兼容之前使用start来进行分页的逻辑<br>
     *
     * @param start 开始下标(从0开始计算)
     * @param pageSize 每页显示数量
     * @param orderBy 排序字段
     * @return 分页信息
     * @deprecated 废弃，方法体修改 {@link #offsetPage(Long, Long, java.lang.String)}
     */
    @Deprecated
    public static <E> PageWrapper<E> startPageByStart(Long start, Long pageSize, String orderBy) {
        return offsetPage(start, pageSize, orderBy);
    }

    /**
     * 开始分页
     *
     * @param offset 起始位置，偏移位置
     * @param limit 每页显示数量
     * @param orderBy 排序字段
     * @return 分页信息
     */
    public static <E> PageWrapper<E> offsetPage(Long offset, Long limit, String orderBy) {
        Page<E> page = com.github.pagehelper.PageHelper.offsetPage(offset.intValue(), limit.intValue());
        com.github.pagehelper.PageHelper.orderBy(orderBy);
        return new PageWrapper<>(page);
    }

    /**
     * 开始分页<br>
     * 必须放在分页mapper接口调用之前，以防出问题
     *
     * @param pageNum 页码，从1开始
     * @param pageSize 每页显示数量
     * @return 分页信息
     */
    public static <E> PageWrapper<E> startPage(Long pageNum, Long pageSize) {
        return new PageWrapper<>(com.github.pagehelper.PageHelper.startPage(pageNum.intValue(), pageSize.intValue()));
    }

    /**
     * 开始分页<br>
     * 必须放在分页mapper接口调用之前，以防出问题
     *
     * @param pageNum 页码，从1开始
     * @param pageSize 每页显示数量
     * @param count 是否统计
     * @return 分页信息
     */
    public static <E> PageWrapper<E> startPage(Long pageNum, Long pageSize, boolean count) {
        return new PageWrapper<>(com.github.pagehelper.PageHelper.startPage(pageNum.intValue(), pageSize.intValue(), count));
    }

    /**
     * 开始分页<br>
     * 必须放在分页mapper接口调用之前，以防出问题
     *
     * @param pageNum 页码，从1开始
     * @param pageSize 每页显示数量
     * @param orderBy 排序字段
     * @return 分页信息
     */
    public static <E> PageWrapper<E> startPage(Long pageNum, Long pageSize, String orderBy) {
        return new PageWrapper<>(com.github.pagehelper.PageHelper.startPage(pageNum.intValue(), pageSize.intValue(), orderBy));
    }
}
